package pe.gob.minam.sismon.core.dao.impl;

import static pe.gob.minam.sismon.core.util.UtilCore.establecerCondicion;
import static pe.gob.minam.sismon.core.util.UtilCore.establecerParam;

import java.util.List;

import javax.persistence.Query;

import org.springframework.stereotype.Repository;

import pe.gob.minam.sismon.core.base.dao.impl.BaseDaoImpl;
import pe.gob.minam.sismon.core.dao.SegPerfilDao;
import pe.gob.minam.sismon.core.domain.GnrSistema;
import pe.gob.minam.sismon.core.domain.SegPerfil;
import pe.gob.minam.sismon.core.util.ExceptionCore;

@Repository("segPerfilDao")
public class SegPerfilDaoImpl extends BaseDaoImpl<SegPerfil> implements SegPerfilDao {

	@SuppressWarnings("unchecked")
	@Override
	public List<SegPerfil> listarPorSistema(GnrSistema gnrSistema) throws ExceptionCore {
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT g FROM SegPerfil g where 1=1 ");
		establecerCondicion(sql, " AND g.gnrSistema=:gnrSistema", gnrSistema);
		Query query = getEntityManager().createQuery(sql.toString());
		establecerParam(query, "gnrSistema", gnrSistema);
		return (List<SegPerfil>) query.getResultList();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<SegPerfil> listarPorSistema(Integer idSistema,
			String nombreCorto, String nombreLargo, String estado) throws ExceptionCore {
		
		StringBuilder sql = new StringBuilder();
		sql.append(" SELECT p FROM SegPerfil p where 1=1 ");
		
		
		establecerCondicion(sql, " AND p.gnrSistema.idSistema=:idSistema", idSistema);
		establecerCondicion(sql, " AND p.nombreCorto=:nombreCorto", nombreCorto);
		establecerCondicion(sql, " AND p.nombreLargo=:nombreLargo", nombreLargo);
		establecerCondicion(sql, " AND p.estado=:estado", estado);		
		
		sql.append(" order by p.idPerfil");
		
		Query query = getEntityManager().createQuery(sql.toString());
		
		establecerParam(query, "idSistema", idSistema);
		establecerParam(query, "nombreCorto", nombreCorto);
		establecerParam(query, "nombreLargo", nombreLargo);
		establecerParam(query, "estado", estado);
		
		return (List<SegPerfil>) query.getResultList();
		
	}

	
}
